﻿using IOSerialize.Serialize;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IOSerialize
{
    /// <summary>
    /// 1 委托封装小作业解析
    /// 2 文件夹/文件 检查、新增、复制、移动、删除，递归编程技巧
    /// 3 文件读写，记录文本日志，读取配置文件
    /// 4 三种序列化器，xml和json
    /// 5 验证码、图片缩放
    /// 
    /// 配置文件的读取,也可以使用xml,jason等等,config只是框架帮我们封装的配置文件.
    /// 作业:看看能不能补全log日志.
    /// 
    /// 序列化和反序列化目的是为了解决:比如.net想把立体化的对象数据(对象里包含了属性,字段,集合,以及其它的对象)
    /// 传给java需要将数据先序列化(序列化后是一个字符串),然后java接收后在反序列化,在我们数据的传输和保存上都离不开序列化,在比如我们需要把数据存到数据库,
    /// 然后java在从数据库里读取,这也是需要序列化的.
    /// 序列化呢就相当于把人的水分挤干了,变成一个薄薄的字片,然后当用的时候在把人放到水里一泡,又变成一个立体的人了.
    /// 序列化和反序列化不会损失数据,他会原封不动的保存和传递.
    /// 序列化:db,jason,xml,byte[]
    /// 有时间看一下<三体><黑暗深><死神永生>,这三本小说.
    /// 
    /// 需要序列化的对象必须添加序列化特性.
    /// 
    /// 二进制序列化器:特点是体积最小,序列化的二进制字符串看不懂.
    /// soap序列化器:特点体积最大,勉强能看懂,可读性一般,早期使用soap的比较多,因为传输的数据比较全,但他体积大后期输给了,jason.
    /// XML序列化器:特点是体积居中,看起来最舒服,可读性相当好,一看就能明白,也非常适合我们人去写,方便书写.
    /// xml的优点:就是当传输的文件有小部分的丢失的话,也还是可以读取的.
    /// json序列化器:网络序列化地址:json.cn. json非常适合阅读.json的体积会比xml更小一些. json是目前比较流行的.
    /// 目前的配置文件用的都是xml,等到后期使用.netcore的时候,配置文件应该都用json.
    /// json有一个缺点,就是他对数据传输的要求非常严格完整,哪怕你少一个符号,整个数据就无法读取了.
    /// Newtonsoft.Json第三方的json序列化工具,序列化的性能比微软自带的那个要好一点.如果对序列化要求不那么高,
    /// 可以不用深入研究,因为里面还有很多其他扩展,这个第三方json解析工具有一个问题,如果版本对应不上可能会出无法解析的问题,
    /// 那如何解决这个问题呢,那就是大家都使用最新的版本.
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("欢迎来到.Net高级班vip课程，今天是Eleven老师为大家带来的IO和序列化");
                {
                    //Console.WriteLine("**************IOShow*************");
                    //MyIO.Show();

                    //MyIO.Log("1235677");
                }
                {
                    Console.WriteLine("**************Serialize*************");
                    SerializeHelper.BinarySerialize();
                    SerializeHelper.SoapSerialize();
                    SerializeHelper.XmlSerialize(); // xml的序列化和反序列化使用这个代码实例-已测试过好用。
                }
                SerializeHelper.Json();

                List<Programmer> list = DataFactory.BuildProgrammerList();
                {
                    Console.WriteLine("********************XmlHelper**********************");
                    string xmlResult = XmlHelper.ToXml<List<Programmer>>(list);
                    List<Programmer> list1 = XmlHelper.ToObject<List<Programmer>>(xmlResult);
                    //List<Programmer> list2 = XmlHelper.FileToObject<List<Programmer>>("");
                }



                {
                    string jResult = JsonHelper.ObjectToString<List<Programmer>>(list);
                    List<Programmer> list1 = JsonHelper.StringToObject<List<Programmer>>(jResult);
                }
                {
                    string jResult = JsonHelper.ToJson<List<Programmer>>(list);
                    List<Programmer> list1 = JsonHelper.ToObject<List<Programmer>>(jResult);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
    }
}
